<?php namespace Phpcmf\Model\Yuedusf; // 这里需要把App改成项目目录名称

// 付款模型示例
class Buy extends \Phpcmf\Model
{

    private $row;

    // 付款表单格式
    public function get_myfield() {

        return [
            'fieldtype' => 'Pay', // 字段类型
            'fieldname' => 'price',
            'setting' => [
                'option' => [
                    'payfile' => 'yuedusf.html', // 模板文件
                    'is_finecms' => 1, // 是否启用余额付款
                ],
            ]
        ];
    }

    // 付款类型名称
    public function paytype() {
        return  '<span class="label label-danger"> 阅读 </span>'; // 最好2个汉字表述
    }

    // 付款前的权限验证，返回null表示可进行付款，返回字符串是就输出字符串
    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    public function pay_before($id, $num, $sku, $siteid) {

        $value = $this->get_price($id, $num, $sku, $siteid);
        if ($value <= 0) {
            return '价格值['.$value.']不规范';
        }

        return '';
    }

    // 付款价格
    // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id
    public function get_price($id, $num, $sku, $siteid, $gids = []) {

        if (!$gids) {
            $gids = $this->member['groupid'];
        }

        // 计算付款价格
        $data = $this->_get_row($id, $sku, $siteid);
        if ($data['yuedusf_sku']) {
            $arr = [];
            $value = dr_string2array($data['yuedusf_sku']);
            foreach ($value as $gid => $t) {
                if (in_array($gid, $gids)) {
                    $arr[] = $t;
                }
            }
            return min($arr); // 取最小的
        } else {
            return $data['yuedusf'];
        }
    }

    // 付款数据
    // $id 记录id; $num 数量; $sku 自定义属性; $siteid 站点id
    public function get_row($id, $num, $sku, $siteid) {

        // 查询数据记录，判断是否存在
        $data = $this->_get_row($id, $sku, $siteid);

        return [
            'price' => $this->get_price($id, $num, $sku, $siteid),
            'title' => '[阅读收费插件] '.$data['title'],
            'sell_uid' => $data['uid'], // 商家uid
            'sell_username' => $data['author'], // 商家账号
        ];
    }

    // 付款成功
    // $id 记录id; $paylog 支付表记录数组; $num 数量; $sku 自定义属性
    public function success($id, $paylog, $num, $sku) {

        // 支付成功之后的回调处理动作
        $data = $this->get_row($id, $num, $sku, $paylog['site']);

        // 打款给商家

        // 为商家增加钱
        \Phpcmf\Service::M('Pay')->add_money($data['sell_uid'], $data['price']);
        // 增加一条记录
        \Phpcmf\Service::M('Pay')->add_paylog([
            'uid' => $data['sell_uid'],
            'username' => $data['sell_username'],
            'touid' => $paylog['uid'],
            'tousername' => $paylog['username'],
            'mid' => $paylog['mid'],
            'title' => '[收入]'.$paylog['title'],
            'value' => $data['price'],
            'type' => 'system',
            'status' => 1,
            'result' => '',
            'url' => '',
            'paytime' => SYS_TIME,
            'inputtime' => SYS_TIME,
        ]);

        // 入库
        $this->table($paylog['site'].'_'.$sku.'_yuedusf')->insert([
            'cid' => $id,
            'buy_uid' => $paylog['uid'],
            'sell_uid' => $data['sell_uid'],
            'value' => $data['price'],
            'inputtime' => SYS_TIME,
        ]);


    }

    // 根据id查询表数据
    // $id 记录id;  $siteid 站点id
    private function _get_row($id, $sku, $siteid) {

        if (isset($this->row[$id]) && $this->row[$id]) {
            return $this->row[$id];
        }

        $this->row[$id] = $this->table($siteid.'_'.dr_safe_filename($sku))->get($id);

        return $this->row[$id];
    }


    // 付款成功跳转URL
    // $id 记录id; $paylog 支付表记录数组
    public function call_url($id, $paylog) {

        list($a, $b, $c, $d, $e) = explode('-', $paylog['mid']);
        return dr_url_prefix('index.php?s='.$e.'&c=show&id='.$c); // 跳转url
    }

    // 价格费用
    public function get_buy_price($mid, $cid, $uid) {

        if (!$mid || !$cid) {
            return '参数不对';
        }


        $data = $this->_get_row($cid, $mid, SITE_ID);
        if (!$data) {
            return '内容不存在';
        }

        // 判断价格
        if (!$data['yuedusf_sku']) {
            // 全局
            if ($data['yuedusf'] == 0) {
                return 0; // 免费的
            }
        }

        $member = dr_member_info($uid);
        if (!$member) {
            return '未登录';
        }

        return $this->get_price($cid, 1, $mid, SITE_ID, $member['groupid']);
    }

    // 判断是否购买过
    public function is_buy($mid, $cid, $uid) {

        if (!$mid || !$cid) {
            return 0;
        } elseif (!dr_is_module($mid)) {
            return 0;
        }

        $data = $this->_get_row($cid, $mid, SITE_ID);
        if (!$data) {
            return 0;
        }

        // 判断价格
        if (!$data['yuedusf_sku']) {
            // 全局
            if ($data['yuedusf'] == 0) {
                return 1; // 免费的 不验证登录
            }
        }

        $member = dr_member_info($uid);
        if (!$member) {
            return 0;
        }

        $price = $this->get_price($cid, 1, $mid, SITE_ID, $member['groupid']);
        if ($price == 0) {
            return 1; // 免费的
        }

        if ($this->table(SITE_ID.'_'.$mid.'_yuedusf')->where('buy_uid', (int)$uid)->where('cid', (int)$cid)->getRow()) {
            return 1;
        } else {
            return 0;
        }
    }
}